package portal.entities;

import java.util.Date;

import javax.persistence.CascadeType;
import javax.persistence.DiscriminatorColumn;
import javax.persistence.Entity;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.OneToOne;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.Table;
import javax.persistence.Transient;

import portal.vo.ProductoVO;

@Entity
@Table(name="Productos")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "categoria")
public abstract class Producto extends AbstractEntity<ProductoVO>{

	private String nombre;
	private Long codigo;
	private String descripcion;
	private String marca;
	private String imagen;  // URL de la imagen
	private Double precio;
	private String paisOrigen;
	private Date fecha;
	private Integer ranking; //bestsellers
	
	
	
	@Transient
	protected ProductoVO getVOInstance() {
		return new ProductoVO();
	}

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
	
	


	public Long getCodigo() {
		return codigo;
	}

	public void setCodigo(Long codigo) {
		this.codigo = codigo;
	}

	public String getDescripcion() {
		return descripcion;
	}

	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}


	public String getMarca() {
		return marca;
	}

	public void setMarca(String marca) {
		this.marca = marca;
	}


	public String getImagen() {
		return imagen;
	}

	public void setImagen(String imagen) {
		this.imagen = imagen;
	}

	public Double getPrecio() {
		return precio;
	}

	public void setPrecio(Double precio) {
		this.precio = precio;
	}

	public String getPaisOrigen() {
		return paisOrigen;
	}

	public void setPaisOrigen(String paisOrigen) {
		this.paisOrigen = paisOrigen;
	}
	
	

	public Date getFecha() {
		return fecha;
	}

	public void setFecha(Date fecha) {
		this.fecha = fecha;
	}

	public Integer getRanking() {
		return ranking;
	}

	public void setRanking(Integer ranking) {
		this.ranking = ranking;
	}

	@Transient
	public ProductoVO getVO() {
		ProductoVO vo = getVOInstance();
		vo.setNombre(nombre);
		vo.setCodigo(codigo);
		vo.setDescripcion(descripcion);
		vo.setPrecio(precio);
		vo.setPaisOrigen(paisOrigen);
		vo.setMarca(marca);
		vo.setImagen(imagen);
		vo.setFecha(fecha);
		vo.setRanking(ranking);
		vo.setId(this.id);
		return vo;
	}

	@Transient
	public void setVO(ProductoVO vo) {
		if (id == null) {
			this.setId(vo.getId());
		}
		this.setNombre(vo.getNombre());
		this.setCodigo(vo.getCodigo());
		this.setDescripcion(vo.getDescripcion());
		this.setPrecio(vo.getPrecio());
		this.setMarca(vo.getMarca());
		this.setPaisOrigen(vo.getPaisOrigen());
		this.setImagen(vo.getImagen());
		this.setFecha(vo.getFecha());
		this.setRanking(vo.getRanking());
	}
	
	@Transient
	public abstract boolean isProductoElectrodomestico();
	@Transient
	public abstract boolean isProductoInfantil();
	@Transient
	public abstract boolean isProductoModa();
	@Transient
	public abstract boolean isProductoMueble();
	
	
	
	
	
}
